package pe.gob.osce.sirenas.wd.jsf.bean.registro;
/*
* Resumen.
* Objeto 				:	RegistroSecretarioBean.java
* Descripcion 			: 	.
* Fecha de Creacion 	: 	26/02/2015.
* Pry de Creacion 		: 	RNA/RNS.
* Autor 				: 	Julio Cayulla.
* ================================================================================================
* Modificaciones
* Motivo						Fecha		Nombre				Descripcion
* ================================================================================================
*
*/
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.ResourceBundle;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIData;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.security.auth.message.callback.PrivateKeyCallback.Request;

import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;

import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.primefaces.event.TabChangeEvent;

import pe.gob.osce.sirenas.model.AuditoriaDTO;
import pe.gob.osce.sirenas.model.DocenciaDTO;
import pe.gob.osce.sirenas.model.EspecialidadAcademicaDTO;
import pe.gob.osce.sirenas.model.FichaArbitralDTO;
import pe.gob.osce.sirenas.model.FormacionAcademicaDTO;
import pe.gob.osce.sirenas.model.ExperienciaLaboralDTO;
import pe.gob.osce.sirenas.model.ParametrosDTO;
import pe.gob.osce.sirenas.model.TrayectoriaArbitralDTO;
import pe.gob.osce.sirenas.svc.ObtenerDatosComunesServiceLocal;
import pe.gob.osce.sirenas.svc.RegistrarFichaArbitroServiceLocal;
import pe.gob.osce.sirenas.svc.RegistrarFichaSecretarioServiceLocal;
import pe.gob.osce.sirenas.svc.RegistrarNotificacionServiceLocal;
import pe.gob.osce.sirenas.util.ModeloException;
import pe.gob.osce.sirenas.wd.util.CODIGO_REGISTRO;
import pe.gob.osce.sirenas.wd.util.ConstanteWeb;
import pe.gob.osce.sirenas.wd.util.RepositorioDatos;
import pe.gob.osce.sirenas.wd.util.UBaseManage;
import pe.gob.osce.sirenas.wd.util.reporte.ReporteLstCapacitacionDS;
import pe.gob.osce.sirenas.wd.util.reporte.ReporteLstDocenciaDS;
import pe.gob.osce.sirenas.wd.util.reporte.ReporteLstEspecialidadAcademicaDS;
import pe.gob.osce.sirenas.wd.util.reporte.ReporteLstExpLaboralDS;
import pe.gob.osce.sirenas.wd.util.reporte.ReporteLstFormacionAcademicaDS;
import pe.gob.osce.sirenas.wd.util.reporte.ReporteLstTrayectoriaArbitralDS;

@ManagedBean
@SessionScoped
public class RegistroSecretarioBean extends UBaseManage implements Serializable{

	/**
	 */
	private static final long serialVersionUID = 8223786763692900159L;

	final static Logger log = Logger.getLogger(RegistroSolicitudBean.class);
	
	
	@EJB
	private	RegistrarFichaSecretarioServiceLocal	registrarFichaSecretarioService;
	@EJB
	private	RegistrarFichaArbitroServiceLocal	registrarFichaArbitroService;
	@EJB
	private	ObtenerDatosComunesServiceLocal	obtenerDatosComunesService;
	@EJB
	private RegistrarNotificacionServiceLocal registrarNotificacionService;

	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteWeb.PROPERTIES);
	
	private	FormacionAcademicaDTO estudiosFormacionAcademica;	
	private	List<FormacionAcademicaDTO> listaFormacionAcademicaCompleta;
	private	List<FormacionAcademicaDTO> listaFormacionAcademicaOriginal;
	private	List<FormacionAcademicaDTO> listaFormacionAcademicaActualizacion;
	private	List<FormacionAcademicaDTO> listaFormacionAcademicaHistorial;
	
	private	ExperienciaLaboralDTO experienciaLaboral;
	private	List<ExperienciaLaboralDTO> listaexperienciaLaboralCompleta;
	private	List<ExperienciaLaboralDTO> listaexperienciaLaboralOriginal;
	private	List<ExperienciaLaboralDTO> listaexperienciaLaboralActualizacion;
	private	List<ExperienciaLaboralDTO> listaExperienciaLaboralHistorial;
	private List<String> msjValidacion;
	
	private RepositorioDatos repositorio;
	private AuditoriaDTO auditoria;
	private FichaArbitralDTO fichaArbitral;
	private RequestContext context;
	private Boolean esPendiente;
	private Boolean esEditar;
	private Boolean btnAgregar;
	private Boolean btnRectificar;
	private Boolean fichaPendiente;
	private UIData uidFormacionAcademica;
	private Integer indiceListaFormacion;
	private Integer indiceListaLaboral;
	private Boolean otrosCentroEstudios;
	private String codTramite;
	/**
	 * Resumen.	Metodo que iniciliza la bandeja de evaluacion de quejas
	 * @return cadena mapeada para la navegacion, tipo String.
	 */

	@PostConstruct
	public void init() {
		this.estudiosFormacionAcademica= new FormacionAcademicaDTO();		
		this.experienciaLaboral= new ExperienciaLaboralDTO();
		this.listaFormacionAcademicaHistorial=new ArrayList<FormacionAcademicaDTO>();
		this.esEditar=false;
		this.otrosCentroEstudios=true;
		repositorio=obtenerRepositorioDatos();
		fichaArbitral=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO); 
		
		obtenerListaFormacionAcademica();
		

		try {
			fichaArbitral.setMapaFormacionAcademica(registrarFichaArbitroService.obtenerMapaFichaFormacionAcademica(fichaArbitral.getIdFicha()));
			//fichaArbitral.getMapaFormacionAcademica().
		}catch(Exception e){
			e.printStackTrace();
		}
		
		//******************************
		validarEstadoFicha();
		/**Validar permisos de Botonoes*/
		btnAgregar=true;
		btnRectificar=false;
	}
	
	public String verRegistroSecretario() {
		this.estudiosFormacionAcademica= new FormacionAcademicaDTO();		
		this.experienciaLaboral= new ExperienciaLaboralDTO();
		this.listaFormacionAcademicaHistorial=new ArrayList<FormacionAcademicaDTO>();
		this.esEditar=false;
		this.otrosCentroEstudios=true;
		repositorio=obtenerRepositorioDatos();
		fichaArbitral=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO); 
		
		obtenerListaFormacionAcademica();
		

		try {
			fichaArbitral.setMapaFormacionAcademica(registrarFichaArbitroService.obtenerMapaFichaFormacionAcademica(fichaArbitral.getIdFicha()));
			//fichaArbitral.getMapaFormacionAcademica().
		}catch(Exception e){
			e.printStackTrace();
		}
		
		//******************************
		validarEstadoFicha();
		/**Validar permisos de Botonoes*/
		btnAgregar=true;
		btnRectificar=false;
		return "verRegistroSecretario";
	}

	public void vistaPrevia()
	{
		
		setMensajeroInfo("En Construccion");
	}
	
	public void vistaConstancia()
	{
		
		setMensajeroInfo("En Construccion");
	}
	
	private void validarEstadoFicha(){
		Long estado=this.fichaArbitral.getIdEstadoFicha();
		if(estado!=Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE).trim())){
			this.esPendiente=false;
		}
		else
		{
			this.esPendiente=true;
		}	
		
	}
	public void onChange(TabChangeEvent event) {
		String titulo=event.getTab().getTitle();
	       	       
		if(titulo.equals(propSirenas.getString(ConstanteWeb.ETIQ_SEC_ACADEMICO).trim())){
			btnAgregar=true;
			btnRectificar=false;
			this.estudiosFormacionAcademica= new FormacionAcademicaDTO();	
			//obtenerListaFormacionAcademica();
		}if(titulo.equals(propSirenas.getString(ConstanteWeb.ETIQ_SEC_LABORAL).trim())){
			btnAgregar=true;
			btnRectificar=false;	
			this.experienciaLaboral= new ExperienciaLaboralDTO();
			obtenerListaExperienciaLaboral();
		}
	}

	public void onChangeCentrosEstudios(ValueChangeEvent event ){
		
		Long seleccionado=Long.parseLong(event.getNewValue().toString().trim());
		if(seleccionado==Long.parseLong(propSirenas.getString(ConstanteWeb.ID_CENTRO_ESTUDIOSEXTRANJERO)))
			otrosCentroEstudios=false;
		else
			otrosCentroEstudios=true;
		
		if(seleccionado!=Long.parseLong(propSirenas.getString(ConstanteWeb.ID_CENTRO_ESTUDIOSEXTRANJERO)))
		{
			this.estudiosFormacionAcademica.setIdPais(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_PERU)));
		}
		else
		{
			this.estudiosFormacionAcademica.setIdPais(Long.parseLong(propSirenas.getString(ConstanteWeb.VALORCERO)));
		}
		
		
	}

	public void abrirCodTramitePopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoTramite').show();");
	}
	public void cerrarCodTramitePopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoTramite').hide();");
	}	
	
	public void abrirCodTramiteExperienciaPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoTramiteLaboral').show();");
	}
	
	public void cerrarCodTramiteExperienciaPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoTramiteLaboral').hide();");
	}
	
	public void cerrarValidacionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogValidacion').hide();");
	}

	public void cerrarConfirmaAcademicaPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogConfirmaAcademica').hide();");
	}
	public void abrirConfirmaAcademicaPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogConfirmaAcademica').show();");
	}
	
	
	public void cerrarConfirmacionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogConfirmacion').hide();");
	}
	/** Experiencia Laboral**/
	public void abrirConfirmacionLaboralPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoConfirmacionLaboral').show();");
	}
	public void cerrarConfirmacionLaboralPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoConfirmacionLaboral').hide();");
	}
	/** FIN Experiencia Laboral**/
	public void abrirConfirmacionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogConfirmacion').show();");
	}
	public void abrirValidacionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogValidacion').show();");
	}

	
	public void validaRectificacion(){
		this.fichaArbitral =(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
		String tpm=propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE);
		if(fichaArbitral.getIdEstadoFicha()==Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE))){
			guardarFormacionAcademicaTabla();
		}else{
			if(encuentraRectificados()){
				abrirCodTramitePopup();
			}else{
				guardarFormacionAcademicaTabla();
			}
		}
		cerrarConfirmaAcademicaPopup();
	}


	public void validaRectificacionLaboral(){
		this.fichaArbitral =(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
		String tpm=propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE);
		if(fichaArbitral.getIdEstadoFicha()==Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE))){
			guardarExperienciaLaboralTabla();
		}else{
			if(encuentraRectificadosLaboral()){
				abrirCodTramiteExperienciaPopup();
			}else{
				guardarExperienciaLaboralTabla();
			}
		}
		cerrarConfirmacionLaboralPopup();
	}
	
	public boolean encuentraRectificados(){
		boolean rectificados=false;
		for (FormacionAcademicaDTO formacionAcademicaDTO : this.listaFormacionAcademicaCompleta) {
			if(formacionAcademicaDTO.getIdModificado()!=Long.parseLong(propSirenas.getString(ConstanteWeb.VALORCERO))){
				rectificados=true;
				break;
			}				
		}
		return rectificados;
	}

	public boolean encuentraRectificadosLaboral(){
		boolean rectificados=false;
		for (ExperienciaLaboralDTO experienciaLaboralDTO : this.listaexperienciaLaboralCompleta) {
			if(experienciaLaboralDTO.getIdModificado()!=Long.parseLong(propSirenas.getString(ConstanteWeb.VALORCERO))){
				rectificados=true;
				break;
			}				
		}
		return rectificados;
	}
	public void validaCodTramite(){
		if(this.estudiosFormacionAcademica.getCodTramite()!=null && this.estudiosFormacionAcademica.getCodTramite().trim().length()>0){
			cerrarCodTramitePopup();
			guardarFormacionAcademicaTabla();
			
		}else{
			setMensajeroInfo("Ingrese el Numero de Tramite de la Rectificacion");
		}
	}
	public void validaCodTramiteExperiencia(){
		if(this.codTramite!=null && this.codTramite.trim().length()>0){
			cerrarCodTramiteExperienciaPopup();
			guardarExperienciaLaboralTabla();
			
		}else{
			setMensajeroInfo("Ingrese el Numero de Tramite de la Rectificacion");
		}
	}
	public void validarReglasGeneracion(){
		try{
			msjValidacion= new ArrayList<String>();
			fichaArbitral=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
			boolean indicadorReglas=true;
			
			if(indicadorReglas){
				FichaArbitralDTO fichaArbitral=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
				JasperPrint jasperSolicitud = new JasperPrint();
				jasperSolicitud=generaFichaSecretarioPdf(jasperSolicitud,fichaArbitral);
				guardoReporteServidor(propSirenas.getString(ConstanteWeb.FS_FICHAS),"vistaPrevia"+fichaArbitral.getNumFicha(),jasperSolicitud);
				
				abrirConfirmacionPopup();
			}else{
				abrirValidacionPopup();
			}		
		
		} catch (ModeloException e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),e.getMessage());
		}	 catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}
	}

	public void generaVistaPreviaSecretarioFicha(){
		try {
			FichaArbitralDTO fichaArbitral=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
			JasperPrint jasperSolicitud = new JasperPrint();
			jasperSolicitud=generaFichaSecretarioPdf(jasperSolicitud,fichaArbitral);
			guardoReporteServidor(propSirenas.getString(ConstanteWeb.FS_FICHAS),"vistaPrevia"+fichaArbitral.getNumFicha(),jasperSolicitud);
			
			RequestContext context = RequestContext.getCurrentInstance();
			context.execute("PF('dialogVisorPDF').show();");
		} catch (ModeloException e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),e.getMessage());
		}	 catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}
	}

	public JasperPrint generaFichaSecretarioPdf(JasperPrint jasperSolicitud,FichaArbitralDTO fichaArbitral)  throws ModeloException{
		RepositorioDatos repositorioDatos=obtenerRepositorioDatos();
		
		List<FormacionAcademicaDTO> lstFormacionAcademica=ObtenerListaFormacionAcademica(repositorioDatos, fichaArbitral);
		List<ExperienciaLaboralDTO> lstExpLaboral=ObtenerListaExpLaboral(repositorioDatos, fichaArbitral);

		try {
			ReporteLstFormacionAcademicaDS formacionAcademicaDS = new ReporteLstFormacionAcademicaDS(	lstFormacionAcademica);
			ReporteLstExpLaboralDS expLaboralDS = new ReporteLstExpLaboralDS(lstExpLaboral);
			
			String rutaImagenLogo = "/recursos/imagenes/Sello Oficial.jpg";
			InputStream imgLogoSt = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream(rutaImagenLogo);
			//IMAGEN
			String rutaSubReport=obtenerRutaServidor()+"reporte\\jasper\\";
			
			HashMap parametros = new HashMap();
			parametros.put("P_IMAGEN_LOGO", imgLogoSt);
			parametros.put("SUBREPORT_DIR", rutaSubReport);
			

			parametros.put("P_NRO_FICHA",""+fichaArbitral.getNumFicha() );
			parametros.put("P_ESTADO_FICHA",""+ fichaArbitral.getEstadoFicha().getNomEstado());
			parametros.put("P_NRO_RUC", ""+fichaArbitral.getPersona().getNumRuc());
			parametros.put("P_NRO_DOCUMENTO", ""+fichaArbitral.getPersona().getNumDocumento());
			parametros.put("P_NOMBRE_COMPLETO", fichaArbitral.getPersona().getNombres()+" "+fichaArbitral.getPersona().getApPaterno()+" "+fichaArbitral.getPersona().getApMaterno());
			
			parametros.put("DS_FORM_ACADEMICA", formacionAcademicaDS);
			parametros.put("DS_LABORAL",expLaboralDS );

			parametros.put("PRINT_FORM_ACADEMICA", !lstFormacionAcademica.isEmpty());
			parametros.put("PRINT_LABORAL", !lstExpLaboral.isEmpty());
			
			
			JasperReport report = JasperCompileManager.compileReport(FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/reporte/jasper/rptVistaPreviaSecretario.jrxml"));

			jasperSolicitud = JasperFillManager.fillReport(report,parametros);
			
		
		} catch (Exception e) {
			log.error(e.getMessage(),e);
			throw new ModeloException("Error al Generar la Ficha en PDF",e);
		}
		return jasperSolicitud;
	}
	

	private List ObtenerListaFormacionAcademica(RepositorioDatos repositorioDatos,FichaArbitralDTO fichaArbitral){
		List<FormacionAcademicaDTO> listArbFormacionAcademica= new ArrayList<FormacionAcademicaDTO>();
		try {
			listArbFormacionAcademica=registrarFichaArbitroService.obtenerFichaFormacionAcademica(fichaArbitral.getIdFicha());		

			if (listArbFormacionAcademica!= null) {
				for (FormacionAcademicaDTO formacionAcademicaDTO : listArbFormacionAcademica) {
					formacionAcademicaDTO.setIdEstadoFicha(fichaArbitral.getIdEstadoFicha());
					formacionAcademicaDTO.setDescAreaProfesion(repositorioDatos.getLabelAreaProfesion(formacionAcademicaDTO.getIdAreaProfesion()).toUpperCase());
					formacionAcademicaDTO.setDescCentroEstudios(repositorioDatos.getLabelCentroEstudios(formacionAcademicaDTO.getIdCentroEstudios()).toUpperCase());
					if(formacionAcademicaDTO.getDescripcionOtroCentro()!=null)
						formacionAcademicaDTO.setDescripcionOtroCentro(formacionAcademicaDTO.getDescripcionOtroCentro().toUpperCase());
					formacionAcademicaDTO.setDescPais(repositorioDatos.getLabelPais(formacionAcademicaDTO.getIdPais()).toUpperCase());
					formacionAcademicaDTO.setDescGradoObtenido(repositorioDatos.getLabelParametro(formacionAcademicaDTO.getIndGradoObtenido()).toUpperCase());
					formacionAcademicaDTO.setDescripcionGrado(formacionAcademicaDTO.getDescripcionGrado().toUpperCase());

				}
			}else{
				return new ArrayList<FormacionAcademicaDTO>();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return listArbFormacionAcademica;
	}

	public void distribuirListaFormacion(){
		this.listaFormacionAcademicaOriginal=new ArrayList<FormacionAcademicaDTO>();
		this.listaFormacionAcademicaActualizacion=new ArrayList<FormacionAcademicaDTO>();

		for (FormacionAcademicaDTO formacionAcademicaDTO : listaFormacionAcademicaCompleta) {
			if(formacionAcademicaDTO.getCodRegistro().equals(CODIGO_REGISTRO.ORIGINAL.getId())){
				this.listaFormacionAcademicaOriginal.add(formacionAcademicaDTO);
			}else {
				this.listaFormacionAcademicaActualizacion.add(formacionAcademicaDTO);
			}
		}
	}

	public List ObtenerListaExpLaboral(RepositorioDatos repositorioDatos,FichaArbitralDTO fichaArbitral){
		this.listaexperienciaLaboralOriginal=new ArrayList<ExperienciaLaboralDTO>();
		this.listaexperienciaLaboralActualizacion=new ArrayList<ExperienciaLaboralDTO>();
		List<ExperienciaLaboralDTO> listArbEspecialExperienciaLaboral=new ArrayList<ExperienciaLaboralDTO>();
		try {
			listArbEspecialExperienciaLaboral=registrarFichaArbitroService.obtenerFichaExpLaboral(fichaArbitral.getIdFicha());
			
			if (listArbEspecialExperienciaLaboral!= null) {
				for (ExperienciaLaboralDTO experienciaLaboralDTO : listArbEspecialExperienciaLaboral) {
					experienciaLaboralDTO.setIdEstadoFicha(fichaArbitral.getIdEstadoFicha());
					experienciaLaboralDTO.setNomCentroTrabajo(experienciaLaboralDTO.getNomCentroTrabajo().toUpperCase());
					experienciaLaboralDTO.setDescripcionCargo(experienciaLaboralDTO.getDescripcionCargo().toUpperCase());
					experienciaLaboralDTO.setVigente(convertAString(experienciaLaboralDTO.getIndicadorActual()));
				}
			}else{
				return new ArrayList<ExperienciaLaboralDTO>();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}	
		return listArbEspecialExperienciaLaboral;
	}
	public void generarRegistroFicha(){
		fichaArbitral=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
		auditoria=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
		RepositorioDatos repositorioDatos=obtenerRepositorioDatos();
		Long correlativo=repositorioDatos.getCorrelativos().get(propSirenas.getString(ConstanteWeb.KEY_CORRELATIVO_FICHA));
		Calendar ahoraCal = Calendar.getInstance();
		int anio=ahoraCal.get(Calendar.YEAR);
		try {
			fichaArbitral.setIdEstadoFicha(repositorioDatos.getIdEstadoLista(ConstanteWeb.EST_REGISTRADO));
			fichaArbitral.setIndModalidadArbitro(repositorioDatos.getValueModalidadArbitraje(propSirenas.getString(ConstanteWeb.MOD_SECRETARIO )));
			fichaArbitral.setFechaModalidad(new Date());
			
			fichaArbitral.setNumFicha(anio+"-"+String.format("%0"+propSirenas.getString(ConstanteWeb.LENGTH_CORRELATIVO)+"d", correlativo));
			registrarFichaArbitroService.generarFichaArbitral(fichaArbitral, auditoria);


			/**Actualizo la FIcha Arbtiral que esta en Session*/
			fichaArbitral=registrarFichaArbitroService.obtenerFichaArbitral(fichaArbitral);				
			String[] descEstado=repositorioDatos.getDescriptoresEstadoLista(fichaArbitral.getEstadoFicha().getIdEstado());
			fichaArbitral.getEstadoFicha().setNomEstado(descEstado[2]);
			
			if(fichaArbitral.getIdEstadoFicha()==Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE))){
				fichaArbitral.setEsPendiente(true);
			}			
			
			if(this.fichaArbitral.getTipoFicha().equals(ConstanteWeb.TIPO_FICHA.ARBITRO.toString())){
				if(this.fichaArbitral.getIndModalidadArbitro()!=null){
					this.fichaArbitral.setModalidadArbitro(repositorioDatos.getDescModalidadArbitraje(this.fichaArbitral.getIndModalidadArbitro().longValue() ));
				}else{
					this.fichaArbitral.setModalidadArbitro("No registra");
				}
				
			}if(this.fichaArbitral.getTipoFicha().equals(ConstanteWeb.TIPO_FICHA.SECRETARIO.toString())){
				this.fichaArbitral.setModalidadArbitro(ConstanteWeb.TIPO_FICHA.SECRETARIO.toString());
			}
			
			
			establecerObjetoSession(ConstanteWeb.FICHA_REGISTRO, fichaArbitral);
			
			/**Si todo sale Bien Actualizo el Correlativo*/
			ParametrosDTO parametro=new ParametrosDTO();
			parametro.setIdParametro(repositorioDatos.getValueParametro(propSirenas.getString(ConstanteWeb.KEY_CORRELATIVO_FICHA)) );
			parametro.setDescValor2(correlativo+1);
			obtenerDatosComunesService.actualizarCorrelativo(parametro, auditoria);
			
			
			cerrarConfirmacionPopup();
			RequestContext.getCurrentInstance().update("gridFichaArbitro");
			setMensajeroInfo("Ficha Registrada Satisfactoriamente");
		} catch (Exception e) {
			e.printStackTrace();
			setMensajeroError("No se pudo Registrar", "");
		}		
	}
	public void obtenerListaFormacionAcademica(){
		this.listaFormacionAcademicaOriginal=new ArrayList<FormacionAcademicaDTO>();
		this.listaFormacionAcademicaActualizacion=new ArrayList<FormacionAcademicaDTO>();
		this.indiceListaFormacion=1;

		try {
			this.listaFormacionAcademicaCompleta=registrarFichaArbitroService.obtenerFichaFormacionAcademica(fichaArbitral.getIdFicha());
			if (listaFormacionAcademicaCompleta!= null) {
				for (FormacionAcademicaDTO formacionAcademicaDTO : listaFormacionAcademicaCompleta) {
					formacionAcademicaDTO.setIdEstadoFicha(this.fichaArbitral.getIdEstadoFicha());		
					formacionAcademicaDTO.setIndice(indiceListaFormacion);
					formacionAcademicaDTO.setDescAreaProfesion(repositorio.getLabelAreaProfesion(formacionAcademicaDTO.getIdAreaProfesion()));
					formacionAcademicaDTO.setDescCentroEstudios(repositorio.getLabelCentroEstudios(formacionAcademicaDTO.getIdCentroEstudios()));
					formacionAcademicaDTO.setDescPais(repositorio.getLabelPais(formacionAcademicaDTO.getIdPais()));
					formacionAcademicaDTO.setDescGradoObtenido(repositorio.getLabelParametro(formacionAcademicaDTO.getIndGradoObtenido()));
					indiceListaFormacion++;

					if(formacionAcademicaDTO.getCodRegistro().equals(CODIGO_REGISTRO.ORIGINAL.getId())){
						this.listaFormacionAcademicaOriginal.add(formacionAcademicaDTO);
					}else {
						this.listaFormacionAcademicaActualizacion.add(formacionAcademicaDTO);
					}
				}
			}else{
				listaFormacionAcademicaCompleta=new ArrayList<FormacionAcademicaDTO>();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void obtenerListaExperienciaLaboral(){
		this.listaexperienciaLaboralOriginal=new ArrayList<ExperienciaLaboralDTO>();
		this.listaexperienciaLaboralActualizacion=new ArrayList<ExperienciaLaboralDTO>();
		this.indiceListaLaboral=1;
		try {
			this.listaexperienciaLaboralCompleta=registrarFichaArbitroService.obtenerFichaExpLaboral(fichaArbitral.getIdFicha());
			if (listaexperienciaLaboralCompleta!= null) {
				for (ExperienciaLaboralDTO experienciaLaboralDTO : listaexperienciaLaboralCompleta) {
					experienciaLaboralDTO.setIdEstadoFicha(this.fichaArbitral.getIdEstadoFicha());
					experienciaLaboralDTO.setIndice(indiceListaLaboral);
					experienciaLaboralDTO.setVigente(convertAString(experienciaLaboralDTO.getIndicadorActual()));
					indiceListaLaboral++;
					
					if(experienciaLaboralDTO.getCodRegistro().equals(CODIGO_REGISTRO.ORIGINAL.getId())){
						this.listaexperienciaLaboralOriginal.add(experienciaLaboralDTO);
					}else {
						this.listaexperienciaLaboralActualizacion.add(experienciaLaboralDTO);
					}
				}
			}else{
				this.listaexperienciaLaboralCompleta=new ArrayList<ExperienciaLaboralDTO>();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void distribuirListaExpLaboral(){
		this.listaexperienciaLaboralOriginal=new ArrayList<ExperienciaLaboralDTO>();
		this.listaexperienciaLaboralActualizacion=new ArrayList<ExperienciaLaboralDTO>();

		for (ExperienciaLaboralDTO experienciaLaboralDTO : listaexperienciaLaboralCompleta) {
			if(experienciaLaboralDTO.getCodRegistro().equals(CODIGO_REGISTRO.ORIGINAL.getId())){
				this.listaexperienciaLaboralOriginal.add(experienciaLaboralDTO);
			}else {
				this.listaexperienciaLaboralActualizacion.add(experienciaLaboralDTO);
			}
		}
	}
	public void agregarFormacionAcademica(){
		if(validaFormAcademica()){
			
				repositorio=obtenerRepositorioDatos();
				
				this.estudiosFormacionAcademica.setIndice(indiceListaFormacion);
				this.estudiosFormacionAcademica.setIdFicha(fichaArbitral.getIdFicha());
				this.estudiosFormacionAcademica.setDescAreaProfesion(repositorio.getLabelAreaProfesion(estudiosFormacionAcademica.getIdAreaProfesion()).toUpperCase());
				this.estudiosFormacionAcademica.setDescCentroEstudios(repositorio.getLabelCentroEstudios(estudiosFormacionAcademica.getIdCentroEstudios()).toUpperCase());
				this.estudiosFormacionAcademica.setDescGradoObtenido(repositorio.getLabelParametro(estudiosFormacionAcademica.getIndGradoObtenido()).toUpperCase());
				this.estudiosFormacionAcademica.setDescPais(repositorio.getLabelPais(estudiosFormacionAcademica.getIdPais()).toUpperCase());
				this.estudiosFormacionAcademica.setDescripcionGrado(this.estudiosFormacionAcademica.getDescripcionGrado().toUpperCase());

				if(this.fichaArbitral.getIdEstadoFicha()==Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE))){
					this.estudiosFormacionAcademica.setCodRegistro(CODIGO_REGISTRO.ORIGINAL.getId() );
				}else{
					this.estudiosFormacionAcademica.setCodRegistro(CODIGO_REGISTRO.ACTUALIZACION.getId() );
				}
				
				this.listaFormacionAcademicaCompleta.add(this.estudiosFormacionAcademica);
				indiceListaFormacion++;
				distribuirListaFormacion();
				this.estudiosFormacionAcademica= new FormacionAcademicaDTO();
			
		}
	}
//	public boolean validaFormAcademica(){
//		if(estudiosFormacionAcademica.getIdAreaProfesion()>0 &&
//			estudiosFormacionAcademica.getIdCentroEstudios()>0 &&
//			estudiosFormacionAcademica.getIndGradoObtenido()>0 &&
//			estudiosFormacionAcademica.getIdPais()>0 &&
//			estudiosFormacionAcademica.getFecEgreso()!=null &&
//			estudiosFormacionAcademica.getDescripcionGrado() !=null &&
//			!estudiosFormacionAcademica.getDescripcionGrado().trim().equals("")){
//			return true;
//		}else {
//			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_VALID_FORM));
//			return false;	
//		}
//	}
	public void valifarFechasFormacion(){
		
	}
	public boolean validaFormAcademica(){
		boolean validacion=true;
		if(estudiosFormacionAcademica.getIdAreaProfesion()<=0)
		{
			setMensajeroError(propSirenas.getString(ConstanteWeb.MSJ_REQ_AREAPROFESION), "");			
			return false;
			
		}	
		if(estudiosFormacionAcademica.getIdCentroEstudios()<=0)
		{
			setMensajeroError(propSirenas.getString(ConstanteWeb.MSJ_REQ_CENTRO_ESTUDIOS), "");
			return false;
								
		}	
		if(estudiosFormacionAcademica.getIndGradoObtenido()<=0)
		{
			setMensajeroError(propSirenas.getString(ConstanteWeb.MSJ_REQ_GRADO_TITULOOBTENIDO), "");
			return false;
						
		}
		if(estudiosFormacionAcademica.getDescripcionGrado()==null || estudiosFormacionAcademica.getDescripcionGrado().trim().equals(""))
		{
			setMensajeroError(propSirenas.getString(ConstanteWeb.MSJ_REQ_DESC_GRADOTITULO), "");
			return false;
			
		}		
		if(estudiosFormacionAcademica.getFecEgreso()==null)
		{
			setMensajeroError(propSirenas.getString(ConstanteWeb.MSJ_REQ_FEC_GRADOTITULO), "");
			return false;
			
		}
		if(estudiosFormacionAcademica.getIdPais()<=0){
			setMensajeroError(propSirenas.getString(ConstanteWeb.MSJ_REQ_PAIS), "");
			return false;
			
		}		
		return validacion;
	}
	public void rectificarFormacionAcademica(){
		if(validaFormAcademica()){
			if(this.estudiosFormacionAcademica.getIdFormacionAcademica()!=null)
				this.estudiosFormacionAcademica.setIdModificado(this.estudiosFormacionAcademica.getIdFormacionAcademica());
			this.estudiosFormacionAcademica.setDescAreaProfesion(repositorio.getLabelAreaProfesion(estudiosFormacionAcademica.getIdAreaProfesion()).toUpperCase());
			this.estudiosFormacionAcademica.setDescCentroEstudios(repositorio.getLabelCentroEstudios(estudiosFormacionAcademica.getIdCentroEstudios()).toUpperCase());
			this.estudiosFormacionAcademica.setDescGradoObtenido(repositorio.getLabelParametro(estudiosFormacionAcademica.getIndGradoObtenido()).toUpperCase());
			this.estudiosFormacionAcademica.setDescPais(repositorio.getLabelPais(estudiosFormacionAcademica.getIdPais()).toUpperCase());
			this.estudiosFormacionAcademica.setDescripcionGrado(this.estudiosFormacionAcademica.getDescripcionGrado().toUpperCase());
			
			int indice=obtieneIndiceArrayListaFormAcademica(this.estudiosFormacionAcademica.getIndice());
			this.listaFormacionAcademicaCompleta.set(indice, this.estudiosFormacionAcademica);
			this.estudiosFormacionAcademica= new FormacionAcademicaDTO();	
			distribuirListaFormacion();
			this.btnAgregar=true;
			this.btnRectificar=false;
		}
	}
	
	public void cancelarRectificacion(){
		this.btnAgregar=true;
		this.btnRectificar=false;
		this.estudiosFormacionAcademica= new FormacionAcademicaDTO();		
	}
	
	public void cargarFormacionAcademica(Integer indiceLista){
		estudiosFormacionAcademica = this.listaFormacionAcademicaCompleta.get(obtieneIndiceArrayListaFormAcademica(indiceLista));
		Long estadoFicha= fichaArbitral.getIdEstadoFicha();
		this.btnAgregar=false;
		if(this.estudiosFormacionAcademica.getIdFormacionAcademica()==null ||estadoFicha==Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE)))
		{
			this.btnRectificar=true;
			this.esEditar=true;
		}
		else
		{
			this.btnRectificar=true;
			this.esEditar=false;
		}
	}
	
	public void fiscalizarFormacionAcademica(){}
	public void eliminarFormacionAcademica(Integer indiceLista){
		FormacionAcademicaDTO formacionTemporal;
		/* Verifico que No se este rectificando ningun registro*/
		if(this.btnAgregar){
			int indice=obtieneIndiceArrayListaFormAcademica(indiceLista);
			formacionTemporal = this.listaFormacionAcademicaCompleta.get(indice);
			//Verifico si el Registro existe en la BD
			if(formacionTemporal.getIdFormacionAcademica()!=null){
				//Si existe, cambio el estado a 0, el sistema lo tomara como eliminado de la BD
				formacionTemporal.setEstado(0L);
				this.listaFormacionAcademicaCompleta.set(indice, formacionTemporal);
			}else{
				//Simplemente elimino el registro de la Lista
				this.listaFormacionAcademicaCompleta.remove(indice);
			}		
			distribuirListaFormacion();	
		}else{
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_VALID_RECTIF));
		}
		
	}
	public String convertAString(boolean indicador){
		if(indicador==true){
			return "SI";
		}else{
			return "NO";
		}
		
	}
	
	public void agregarExperienciaLaboral(){

		if(validaFormExpLabora()){
			if(validarFechaExperienciaLaboral())
			{
				repositorio=obtenerRepositorioDatos();
				this.experienciaLaboral.setIndice(indiceListaLaboral);
				this.experienciaLaboral.setIdFicha(fichaArbitral.getIdFicha());
				this.experienciaLaboral.setIndEspecialidad(0);//0 indentificara a aquellos registros de secretario en esta tabla que tambien se utiliza para Arbitro
				this.experienciaLaboral.setNomCentroTrabajo(this.experienciaLaboral.getNomCentroTrabajo().toUpperCase());
				this.experienciaLaboral.setDescripcionCargo(this.experienciaLaboral.getDescripcionCargo().toUpperCase());
				if(this.experienciaLaboral.getFecEgreso()==null)
					this.experienciaLaboral.setIndicadorActual(true);
				this.experienciaLaboral.setVigente(convertAString(this.experienciaLaboral.getIndicadorActual()));

				if(this.fichaArbitral.getIdEstadoFicha()==Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE))){
					this.experienciaLaboral.setCodRegistro(CODIGO_REGISTRO.ORIGINAL.getId() );
				}else{
					this.experienciaLaboral.setCodRegistro(CODIGO_REGISTRO.ACTUALIZACION.getId() );
				}
				
				this.listaexperienciaLaboralCompleta.add(this.experienciaLaboral);
				indiceListaLaboral++;
				distribuirListaExpLaboral();
				this.experienciaLaboral= new ExperienciaLaboralDTO();	
			}
		}
	}

	
	public boolean validaFormExpLabora(){
		boolean confirmacion=true;
		if(experienciaLaboral.getNomCentroTrabajo()==null || experienciaLaboral.getNomCentroTrabajo().trim().equals(""))
		{
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_REQ_EXP_CENTRO_TRABAJO));
			return false;	
		}
		if(experienciaLaboral.getDescripcionCargo()==null || experienciaLaboral.getDescripcionCargo().trim().equals(""))
		{
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_REQ_EXP_PUESTO_TRABAJO));
			return false;	
		}
		if(experienciaLaboral.getFecIngreso()==null)
		{
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_REQ_EXP_FEC_INGRESO));
			return false;	
		}
		if(experienciaLaboral.getFecEgreso()==null)
		{
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_REQ_EXP_FEC_EGRESO));
			return false;	
		}
		return confirmacion;
	}
	
	public boolean validarFechaExperienciaLaboral()
	{
		boolean confirmacion=true;
		if( experienciaLaboral.getFecEgreso()!=null)
		{
			if(experienciaLaboral.getFecEgreso().compareTo(experienciaLaboral.getFecIngreso())<0)
			{
				setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_REGLA_FECHAS_EXPERIENCIA));
				return false;
			}
		}
		return confirmacion;
		
	}
	
	public void rectificarExpLaboral(){
		if(validaFormExpLabora()){		
			if(validarFechaExperienciaLaboral()){
			if(this.experienciaLaboral.getIdLaboral()!=null)
				this.experienciaLaboral.setIdModificado(this.experienciaLaboral.getIdLaboral());
			this.experienciaLaboral.setNomCentroTrabajo(this.experienciaLaboral.getNomCentroTrabajo().toUpperCase());
			this.experienciaLaboral.setDescripcionCargo(this.experienciaLaboral.getDescripcionCargo().toUpperCase());
			if(this.experienciaLaboral.getFecEgreso()==null)
				this.experienciaLaboral.setIndicadorActual(true);
			this.experienciaLaboral.setVigente(convertAString(this.experienciaLaboral.getIndicadorActual()));
			int indice=obtieneIndiceArrayListaExpLaboral(this.experienciaLaboral.getIndice());
			this.listaexperienciaLaboralCompleta.set(indice, this.experienciaLaboral);
			this.experienciaLaboral= new ExperienciaLaboralDTO();	

			distribuirListaExpLaboral();
			this.btnAgregar=true;
			this.btnRectificar=false;
			}
		}
	}
	
	public void cancelarRectificacionlaboral(){
		this.btnAgregar=true;
		this.btnRectificar=false;
		this.experienciaLaboral= new ExperienciaLaboralDTO();		
	}
	
	public void cargarExpLaboral(Integer indiceLista){
		this.experienciaLaboral = this.listaexperienciaLaboralCompleta.get(obtieneIndiceArrayListaExpLaboral(indiceLista));
		Long estadoFicha=fichaArbitral.getIdEstadoFicha();
		this.btnAgregar=false;
		if(this.experienciaLaboral.getIdLaboral()==null || estadoFicha==Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE)))
		{
			this.btnRectificar=true;
			this.esEditar=true;
		}
		else
		{
			this.btnRectificar=true;
			this.esEditar=false;
		}
		
	}
	public void eliminarExpLaboral(Integer indiceLista){
		ExperienciaLaboralDTO laboralTemporal;
		/* Verifico que No se este rectificando ningun registro*/
		if(this.btnAgregar){
			int indice=obtieneIndiceArrayListaExpLaboral(indiceLista);
			laboralTemporal = this.listaexperienciaLaboralCompleta.get(indice);
			//Verifico si el Registro existe en la BD
			if(laboralTemporal.getIdLaboral()!=null){
				//Si existe, cambio el estado a 0, el sistema lo tomara como eliminado de la BD
				laboralTemporal.setEstado(0L);
				this.listaexperienciaLaboralCompleta.set(indice, laboralTemporal);
			}else{
				//Simplemente elimino el registro de la Lista
				this.listaexperienciaLaboralCompleta.remove(indice);
			}			
			distribuirListaExpLaboral();
		}else{
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_VALID_RECTIF));
		}
		
	}
	
	public void mostrarfechaActual()
	
	{
		  String summary = this.experienciaLaboral.getIndicadorActual() ? "Checked" : "Unchecked"; 
		  
		  if(summary.equals("Checked"))
			  this.experienciaLaboral.setFecEgreso(new Date());
		  else
			  this.experienciaLaboral.setFecEgreso(null);
		  
	}
	
	
	
	/** Metodo de para guardar la formacion Academica ***/
	public void  guardarFormacionAcademicaTabla(){
        List<FormacionAcademicaDTO> listFormacionAcademicaDTO;
		AuditoriaDTO auditoria=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
		try{

			listFormacionAcademicaDTO= this.listaFormacionAcademicaCompleta;
			if(this.fichaArbitral.getIdEstadoFicha()!=Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE)))
			{
				for (FormacionAcademicaDTO formacionAcademicaDTO : listFormacionAcademicaDTO) {
					if(formacionAcademicaDTO.getIdModificado()!=Long.parseLong(propSirenas.getString(ConstanteWeb.VALORCERO)))
					formacionAcademicaDTO.setCodTramite(this.estudiosFormacionAcademica.getCodTramite());
				}
			}
			this.listaFormacionAcademicaCompleta=registrarFichaSecretarioService.guardarListFormacionAcademica(listFormacionAcademicaDTO, auditoria,this.fichaArbitral.getIdPersona());
			obtenerListaFormacionAcademica();
			this.estudiosFormacionAcademica= new FormacionAcademicaDTO();
			RequestContext.getCurrentInstance().update("idFormAcademicaSecretario");
			RequestContext.getCurrentInstance().update("idDialogTramiteSecretario");
			RequestContext.getCurrentInstance().update("dialogoConfirmacionFormacionPopup");
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_REG_OK));
		}catch(Exception e){
			log.error(e.getMessage(),e);
			setMensajeroError(propSirenas.getString(ConstanteWeb.MSJ_REG_ERROR),"");
		}
	}
	/** Metodo de para guardar la experiencia Laboral ***/
	public void  guardarExperienciaLaboralTabla(){
        System.out.println("Entro a mi Experiencia Laboral");
        List<ExperienciaLaboralDTO> listExperienciaLaboralDTO;
        AuditoriaDTO auditoria=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
        FichaArbitralDTO fichaArbitral=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
		try{
			/* Ejecutar guardar borrador de formulario. */
			listExperienciaLaboralDTO= this.listaexperienciaLaboralCompleta;
			if(this.fichaArbitral.getIdEstadoFicha()!=Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE)))
			{
				for (ExperienciaLaboralDTO experienciaLaboralDTO : listExperienciaLaboralDTO) {
					if(experienciaLaboralDTO.getIdModificado()!=Long.parseLong(propSirenas.getString(ConstanteWeb.VALORCERO)))
							experienciaLaboralDTO.setCodTramite(this.codTramite);
				}
			}
			this.listaexperienciaLaboralCompleta= registrarFichaSecretarioService.guardarExperienciaLaboral(listaexperienciaLaboralCompleta,auditoria,this.fichaArbitral.getIdPersona());
			this.codTramite="";
			RequestContext.getCurrentInstance().update("idFormExpLaboral");
			RequestContext.getCurrentInstance().update("dialogoConfirmacionExperienciaPopup");
			RequestContext.getCurrentInstance().update("dialogoConfirmacionTramitePopup");
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_REG_OK));
		}catch(Exception e){
			log.error(e.getMessage(),e);
			setMensajeroError(propSirenas.getString(ConstanteWeb.MSJ_REG_ERROR),"");
		}
	}  
	
	public int obtieneIndiceArrayListaFormAcademica(Integer indiceLista){
		int indice=0;
		for (FormacionAcademicaDTO formacionAcademica : this.listaFormacionAcademicaCompleta) {
			if(formacionAcademica.getIndice()==indiceLista){
				break;
			}
			indice++;
		}
		return indice;
	}
	public int obtieneIndiceArrayListaExpLaboral(Integer indiceLista){
		int indice=0;
		for (ExperienciaLaboralDTO  experienciaLaboral: this.listaexperienciaLaboralCompleta) {
			if(experienciaLaboral.getIndice()==indiceLista){
				break;
			}
			indice++;
		}
		return indice;
	}

	
	
	public void verHistorialFormacionAcademica(Long idFormacionAcademica){
		try {
			this.listaFormacionAcademicaHistorial= new ArrayList<FormacionAcademicaDTO>();
			this.listaFormacionAcademicaHistorial=registrarFichaArbitroService.consultarHistorialFormacionAcademica(idFormacionAcademica);
			
			if(this.listaFormacionAcademicaHistorial!=null)
			{
				for (FormacionAcademicaDTO formacionAcademicaDTO : listaFormacionAcademicaHistorial) {
					formacionAcademicaDTO.setDescAreaProfesion(repositorio.getLabelAreaProfesion(formacionAcademicaDTO.getIdAreaProfesion()));
					formacionAcademicaDTO.setDescCentroEstudios(repositorio.getLabelCentroEstudios(formacionAcademicaDTO.getIdCentroEstudios()));
					formacionAcademicaDTO.setDescPais(repositorio.getLabelPais(formacionAcademicaDTO.getIdPais()));
					formacionAcademicaDTO.setDescGradoObtenido(repositorio.getLabelParametro(formacionAcademicaDTO.getIndGradoObtenido()));			
				}
			}
		} catch (Exception e) {
			this.listaFormacionAcademicaHistorial= new ArrayList<FormacionAcademicaDTO>();
		}
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogHistorialFormacionAcademica').show();");
		
	}
	
	public void cancelarRectificacionEspecialidad(){		
		this.listaFormacionAcademicaHistorial= new ArrayList<FormacionAcademicaDTO>();
		cerrarEspAcademicaHistorialPopup();
	}
	
	public void cerrarEspAcademicaHistorialPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogHistorialFormacionAcademica').hide();");
	}
	
	public void verHistorialExperienciaLaboral(Long idExperienciaLaboral){
			
			try {
				this.listaExperienciaLaboralHistorial= new ArrayList<ExperienciaLaboralDTO>();
				this.listaExperienciaLaboralHistorial=registrarFichaArbitroService.consultarHistorialExperienciaLaboral(idExperienciaLaboral);
				
			} catch (Exception e) {
				this.listaExperienciaLaboralHistorial= new ArrayList<ExperienciaLaboralDTO>();
			}
			
			context = RequestContext.getCurrentInstance();
			context.execute("PF('dialogExperienciaLaboralHistorial').show()");		
			
		}
	 public void cancelarPopupExperienciaLaboralHistorial(){
			
		 this.listaExperienciaLaboralHistorial= new ArrayList<ExperienciaLaboralDTO>();
		 cerrarExperienciaLaboralHistorialPopup();
	  }
	public void cerrarExperienciaLaboralHistorialPopup(){
			context = RequestContext.getCurrentInstance();
			context.execute("PF('dialogExperienciaLaboralHistorial').hide();");
	}
	
	
	
	
	
	/*****************Metodos Getts y Sets*****************/
	public FormacionAcademicaDTO getEstudiosFormacionAcademica() {
		return estudiosFormacionAcademica;
	}
	public void setEstudiosFormacionAcademica(FormacionAcademicaDTO estudiosFormacionAcademica) {
		this.estudiosFormacionAcademica = estudiosFormacionAcademica;
	}

	public List<FormacionAcademicaDTO> getListaFormacionAcademicaCompleta() {
		return listaFormacionAcademicaCompleta;
	}

	public void setListaFormacionAcademicaCompleta(
			List<FormacionAcademicaDTO> listaFormacionAcademicaCompleta) {
		this.listaFormacionAcademicaCompleta = listaFormacionAcademicaCompleta;
	}

	public List<FormacionAcademicaDTO> getListaFormacionAcademicaOriginal() {
		return listaFormacionAcademicaOriginal;
	}

	public void setListaFormacionAcademicaOriginal(
			List<FormacionAcademicaDTO> listaFormacionAcademicaOriginal) {
		this.listaFormacionAcademicaOriginal = listaFormacionAcademicaOriginal;
	}

	public List<FormacionAcademicaDTO> getListaFormacionAcademicaActualizacion() {
		return listaFormacionAcademicaActualizacion;
	}

	public void setListaFormacionAcademicaActualizacion(
			List<FormacionAcademicaDTO> listaFormacionAcademicaActualizacion) {
		this.listaFormacionAcademicaActualizacion = listaFormacionAcademicaActualizacion;
	}

	public ExperienciaLaboralDTO getexperienciaLaboral() {
		return experienciaLaboral;
	}
	public void setexperienciaLaboral(ExperienciaLaboralDTO experienciaLaboral) {
		this.experienciaLaboral = experienciaLaboral;
	}



	public List<ExperienciaLaboralDTO> getListaexperienciaLaboralCompleta() {
		return listaexperienciaLaboralCompleta;
	}

	public void setListaexperienciaLaboralCompleta(
			List<ExperienciaLaboralDTO> listaexperienciaLaboralCompleta) {
		this.listaexperienciaLaboralCompleta = listaexperienciaLaboralCompleta;
	}

	public List<ExperienciaLaboralDTO> getListaexperienciaLaboralOriginal() {
		return listaexperienciaLaboralOriginal;
	}

	public void setListaexperienciaLaboralOriginal(
			List<ExperienciaLaboralDTO> listaexperienciaLaboralOriginal) {
		this.listaexperienciaLaboralOriginal = listaexperienciaLaboralOriginal;
	}

	public List<ExperienciaLaboralDTO> getListaexperienciaLaboralActualizacion() {
		return listaexperienciaLaboralActualizacion;
	}

	public void setListaexperienciaLaboralActualizacion(
			List<ExperienciaLaboralDTO> listaexperienciaLaboralActualizacion) {
		this.listaexperienciaLaboralActualizacion = listaexperienciaLaboralActualizacion;
	}

	/**
	 * Metodo que permite obtener btnAgregar.
	 * @return btnAgregar , tipo Boolean.
	 */
	public Boolean getBtnAgregar() {
		return btnAgregar;
	}

	/**
	 * Permite actualizar btnAgregar.
	 * @param btnAgregar, tipo Boolean.
	 */
	public void setBtnAgregar(Boolean btnAgregar) {
		this.btnAgregar = btnAgregar;
	}

	/**
	 * Metodo que permite obtener btnRectificar.
	 * @return btnRectificar , tipo Boolean.
	 */
	public Boolean getBtnRectificar() {
		return btnRectificar;
	}

	/**
	 * Permite actualizar btnRectificar.
	 * @param btnRectificar, tipo Boolean.
	 */
	public void setBtnRectificar(Boolean btnRectificar) {
		this.btnRectificar = btnRectificar;
	}

	/**
	 * Metodo que permite obtener uidFormacionAcademica.
	 * @return uidFormacionAcademica , tipo UIData.
	 */
	public UIData getUidFormacionAcademica() {
		return uidFormacionAcademica;
	}

	/**
	 * Permite actualizar uidFormacionAcademica.
	 * @param uidFormacionAcademica, tipo UIData.
	 */
	public void setUidFormacionAcademica(UIData uidFormacionAcademica) {
		this.uidFormacionAcademica = uidFormacionAcademica;
	}

	public List<FormacionAcademicaDTO> getListaFormacionAcademicaHistorial() {
		return listaFormacionAcademicaHistorial;
	}

	public void setListaFormacionAcademicaHistorial(
			List<FormacionAcademicaDTO> listaFormacionAcademicaHistorial) {
		this.listaFormacionAcademicaHistorial = listaFormacionAcademicaHistorial;
	}

	public List<ExperienciaLaboralDTO> getListaExperienciaLaboralHistorial() {
		return listaExperienciaLaboralHistorial;
	}

	public void setListaExperienciaLaboralHistorial(
			List<ExperienciaLaboralDTO> listaExperienciaLaboralHistorial) {
		this.listaExperienciaLaboralHistorial = listaExperienciaLaboralHistorial;
	}

	/**
	 * Metodo que permite obtener msjValidacion.
	 * @return msjValidacion , tipo List<String>.
	 */
	public List<String> getMsjValidacion() {
		return msjValidacion;
	}

	/**
	 * Permite actualizar msjValidacion.
	 * @param msjValidacion, tipo List<String>.
	 */
	public void setMsjValidacion(List<String> msjValidacion) {
		this.msjValidacion = msjValidacion;
	}


	/**
	 * Metodo que permite obtener fichaPendiente.
	 * @return fichaPendiente , tipo Boolean.
	 */
	public Boolean getFichaPendiente() {
		return fichaPendiente;
	}

	/**
	 * Permite actualizar fichaPendiente.
	 * @param fichaPendiente, tipo Boolean.
	 */
	public void setFichaPendiente(Boolean fichaPendiente) {
		this.fichaPendiente = fichaPendiente;
	}

	/**
	 * Metodo que permite obtener fichaArbitral.
	 * @return fichaArbitral , tipo FichaArbitralDTO.
	 */
	public FichaArbitralDTO getFichaArbitral() {
		return fichaArbitral;
	}

	/**
	 * Permite actualizar fichaArbitral.
	 * @param fichaArbitral, tipo FichaArbitralDTO.
	 */
	public void setFichaArbitral(FichaArbitralDTO fichaArbitral) {
		this.fichaArbitral = fichaArbitral;
	}

	/**
	 * Metodo que permite obtener esPendiente.
	 * @return esPendiente , tipo Boolean.
	 */
	public Boolean getEsPendiente() {
		return esPendiente;
	}

	/**
	 * Permite actualizar esPendiente.
	 * @param esPendiente, tipo Boolean.
	 */
	public void setEsPendiente(Boolean esPendiente) {
		this.esPendiente = esPendiente;
	}

	public Boolean getEsEditar() {
		return esEditar;
	}

	public void setEsEditar(Boolean esEditar) {
		this.esEditar = esEditar;
	}

	public Boolean getOtrosCentroEstudios() {
		return otrosCentroEstudios;
	}

	public void setOtrosCentroEstudios(Boolean otrosCentroEstudios) {
		this.otrosCentroEstudios = otrosCentroEstudios;
	}

	public String getCodTramite() {
		return codTramite;
	}

	public void setCodTramite(String codTramite) {
		this.codTramite = codTramite;
	}
	
	
}